//
//  SQLiteManager.swift
//  FMDB
//
//  Created by iOS on 15/12/11.
//  Copyright © 2015年 iOS. All rights reserved.
//

import UIKit

/*
    FMDB核心对象:
        1.FMDatabase: 一个FMDatabase对象,对应一个数据库.操作数据库,都是通过这个对象
            1.executeUpdate: 在FMDB中,除了查询的sql,其他都称为update(INSERT INTO, UPDATE, DELE, CREATE,)
            2.executeQuery: 执行查询sql
            3.executeStatements: 可以执行多条sql语句
        2.FMDatabaseQueue: 内部有一个FMDatabase,还有一个队列,通过FMDatabaseQueue可以异步执行sql语句,提供事务。建议使用FMDatabaseQueue
            1.inDatabase: 不带事务的方式来执行sql
            2.inTransaction: 使用事务执行sql

        3.FMResultSet:
            next: 执行下一步,返回true就表示有一条记录,false表示没有记录了
            columnCount: 字段数
            columnIndexForName: 通过名称来获取是第几列
            columnNameForIndex: 通过列号来获取字段名称
            intForColumn:(NSString*)columnName:   通过字段名称获取int类型的值
            intForColumnIndex:(int)columnIdx: 通过列数来获取int类型的
*/

/// 单例,操作数据库
class CZSQLiteManager: NSObject {

    // 单例
    static let sharedManager = CZSQLiteManager()
    
    // 以后操作数据库都使用这个对象, 想在对象初始化的时候赋值
    let dbQueue: FMDatabaseQueue
    
    /// 私有化构造方法
    private override init() {
        let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
        
        let dbPath = (documentPath as NSString).stringByAppendingPathComponent("status.db")
        
        print("dbPath: \(dbPath)")
        // 创建FMDatabaseQueue对象,如果不存在数据库,会自动创建数据库,打开数据库
        // path 数据库的路径
        dbQueue = FMDatabaseQueue(path: dbPath)

        super.init()
        
        // 创建数据表
        createTable("T_Status")
    }
    
    /**
    创建数据表
    
    - parameter tName: 表名称
    */
    func createTable(tName: String) {
//        let sql = "CREATE TABLE IF NOT EXISTS \(tName) ( \n" +
//            "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" +
//            "name TEXT, \n" +
//            "age INTEGER, \n" +
//            "height REAL \n" +
//        ");"
        
        // 从文件加载sql语句
        let tablePath = NSBundle.mainBundle().pathForResource("tables", ofType: "sql")
        
        let data = NSData(contentsOfFile: tablePath!)
        
        // 转成String类型
        let sqls = String(data: data!, encoding: NSUTF8StringEncoding)!
        
        /// 可变参数,参数个数和类型任意
//        NSLog(<#T##format: String##String#>, <#T##args: CVarArgType...##CVarArgType#>)
        
        // 执行sql语句创建表
        dbQueue.inDatabase { (db) -> Void in
            // 执行一条更新的sql
//            if db.executeUpdate(sql) {
//                print("创建数据表成功")
//            }
            
            // 执行多条sql
            if db.executeStatements(sqls) {
                print("执行多条成功")
            }
        }
    }
}
